package it.gestionedocumentale.spring.service;

import it.gestionedocumentale.hibernate.dao.ClassificazioneDAO;
import it.gestionedocumentale.hibernate.sessionfactory.HibernateSessionFactory;
import it.gestionedocumentale.model.Classificazione;
import it.gestionedocumentale.struts.form.ClassificazioneForm;

import java.util.List;

import org.hibernate.Transaction;
import org.springframework.beans.BeanUtils;

public class ClassificazioneServiceImpl implements ClassificazioneService {
	private ClassificazioneDAO classificazioneDAO;

	public void setClassificazioneDAO(ClassificazioneDAO classificazioneDAO) {
		this.classificazioneDAO = classificazioneDAO;
	}

	public ClassificazioneDAO getClassificazioneDAO() {
		return classificazioneDAO;
	}

	@Override
	public void save(Classificazione transientInstance) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		classificazioneDAO.save(transientInstance);
		tx.commit();

	}

	@Override
	public void delete(Classificazione persistentInstance) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		classificazioneDAO.delete(persistentInstance);
		tx.commit();
	}
	
	@Override
	public void update(ClassificazioneForm classificazioneForm)
			throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
			.beginTransaction();
		Classificazione classificazioneDaModificare = classificazioneDAO.findById(classificazioneForm.getIdClassificazione());
		BeanUtils.copyProperties(classificazioneForm, classificazioneDaModificare);
		tx.commit();
	}
	
	@Override
	public Classificazione findById(Long idClassif) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		Classificazione cl = classificazioneDAO.findById(idClassif);
		tx.commit();
		return cl;
	}

	@Override
	public List<Classificazione> findByExample(Classificazione instance)
			throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		List<Classificazione> result = classificazioneDAO
				.findByExample(instance);
		tx.commit();
		return result;
	}

	@Override
	public List<Classificazione> findAll() throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		List<Classificazione> classificazioni = classificazioneDAO.findAll();
		tx.commit();
		return classificazioni.size() < 1 ? null : classificazioni;
	}

}
